package lc.q51_100;

/**
 * 给定一个整数数组 nums ，找到一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。
 */
public class Q53 {

    // 分治法如何求解问题呢
    public int maxSubArray2(int[] nums) {
        // 包含当前值的最大子序和应该是？
        int pre = nums[0];
        int max = nums[0];
        for (int i = 1; i < nums.length; i++) {
            pre = Math.max(pre+ nums[i], nums[i]);
            max = Math.max(pre, max);
        }
        return max;
    }

    public int maxSubArray(int[] nums) {
        // 包含当前值的最大子序和应该是？
        int pre = nums[0];
        int max = nums[0];
        for (int i = 1; i < nums.length; i++) {
            pre = Math.max(pre+ nums[i], nums[i]);
            max = Math.max(pre, max);
        }
        return max;
    }

    public static void main(String[] args) {
        Q53 q53 = new Q53();
        int i = q53.maxSubArray(new int[]{-2, 1, -3, 4, -1, 2, 1, -5, 4});
        System.out.println(i);
    }

}
